package class01;

import sun.security.x509.RFC822Name;

/**
 * @author zhangchaoliang
 * create 2022
 */
public class BSAwesome {
    public static int getLessIndex(int[] arr){
        if (arr==null ||arr.length==0){
            return -1;
        }
        if (arr.length==1||arr[0]<arr[1])
            return 0;
        if (arr[arr.length-1]<arr[arr.length-2])
            return arr.length-1;

        int left = 1;
        int right = arr.length-2;
        int mid = 0;

        while (left<right){
            mid=(left+right)/2;
            if (arr[mid]>arr[mid-1]){
                right=mid-1;
            }else if (arr[mid]>arr[mid+1]){
                left = mid+1;
            }else
                return mid;
        }
        return left;
    }

    public static boolean isRight(int[] arr,int index){
        if (arr.length<=1)
            return true;
        if (index ==0)
            return arr[index]<arr[index+1];
        if (index==arr.length-1){
            return arr[index]<arr[index-1];
        }
        return arr[index]<arr[index-1]&&arr[index]<arr[index+1];
    }

    public static int[] generateRandomArray(int maxSize,int maxValue){
        //Math.random()  [0,1)
        //Math.random() * maxSize   [0,maxSize)
        //(Math.random() * maxSize) + 1   [1,maxSize]
        int[] arr = new int[(int) (Math.random() * maxSize) + 1];
        //Math.random()  [0,1)
        //maxSize*Math.random()  [0,maxSize)
        //maxSize*Math.random()+ Math.random()   [0,maxSize)+[0,1)=[0,maxSzie]
//        int[] arr = new int[(int)((maxSize+1)*Math.random())];
        arr[0] = (int) (Math.random() * (maxValue+1)) - (int) (Math.random() * (maxValue+1));
        for (int i = 1; i < arr.length; i++) {
            do {
                arr[i] = (int) (Math.random() * (maxValue+1)) - (int) (Math.random() * (maxValue+1));
            } while (arr[i] == arr[i - 1]);
        }
        return arr;
    }

    public static void main(String[] args) {
        int testTime = 500000;
        int maxSize=100;
        int maxValue = 100;
        System.out.println("测试开始！");
        for (int i=0;i<testTime;i++){
            int[] arr = generateRandomArray(maxSize,maxValue);
            int ans = getLessIndex(arr);
            if (!isRight(arr,ans)){
                System.out.println("出错了！");
                break;
            }
        }
        System.out.println("测试结束");
    }


}
